package cn.demoncat.util.excel;

import cn.demoncat.util.lang.ObjectUtil;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;

/**
 * Excel样式工具
 *
 * @author 延晓磊
 * @since 2023年08月24日
 */
public class ExcelStyleUtil {

    /**
     * 设置边框样式：四边黑色细线
     *
     * @param style
     *
     * @author 延晓磊
     * @since 2023年08月24日
     */
    public static void border(CellStyle style){
        // 边框颜色：黑色边框
        style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        // 边框样式：实体细线
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        style.setBorderTop(BorderStyle.THIN);
    }

    /**
     * 设置自动换行：包括\n换行，以及超出宽度时自动换行
     *
     * @param style
     *
     * @author 延晓磊
     * @since 2023年08月24日
     */
    public static void wrapText(CellStyle style){
        style.setWrapText(true);
    }

    /**
     * 设置字体样式
     *
     * @param wb
     * @param style
     * @param color		默认黑色
     * @param height	调度，如10
     * @param bold		是否加粗
     *
     * @author 延晓磊
     * @since 2023年08月24日
     */
    public static void font(Workbook wb, CellStyle style, HSSFColor.HSSFColorPredefined color, short height, boolean bold){
        // 创建字体
        Font font = wb.createFont();
        // 字体颜色：黑色
        font.setColor(ObjectUtil.toDefault(color, HSSFColor.HSSFColorPredefined.BLACK).getIndex());
        // 字体高度
        font.setFontHeightInPoints(height);
        // 字体加粗
        font.setBold(bold);
        // 字体风格
        font.setFontName(ExcelUtil.FONT_NAME);
        // 添加字体到表格样式
        style.setFont(font);
    }

    /**
     * 设置对齐
     *
     * @param style
     * @param horizontal    水平，默认居中
     * @param vertical        垂直，默认居中
     * @author 延晓磊
     * @since 2023年08月24日
     */
    public static void align(CellStyle style, HorizontalAlignment horizontal, VerticalAlignment vertical){
        // 水平
        style.setAlignment(ObjectUtil.toDefault(horizontal, HorizontalAlignment.CENTER));
        // 垂直
        style.setVerticalAlignment(ObjectUtil.toDefault(vertical, VerticalAlignment.CENTER));
    }

    /**
     * 设置背景色
     *
     * @param style
     * @param color    默认blue
     * @author 延晓磊
     * @since 2023年08月24日
     */
    public static void background(CellStyle style, HSSFColor.HSSFColorPredefined color){
        // 前景色：浅蓝色
        style.setFillForegroundColor(ObjectUtil.toDefault(color, HSSFColor.HSSFColorPredefined.LIGHT_CORNFLOWER_BLUE).getIndex());
        // 实体填充
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    }
}
